S3バケットのファイルを上書きした際のAthena動作を確認する
S3バケットに置いたCSVファイルやJSONファイルをAmazon Athenaで確認することがあります。 そこでふと気になりました。ファイルを上書き(または削除してから追加)した場合、ちゃんと反映されるのだろうか?)と。 試してみました。
おすすめの方
- S3のファイルを上書き(または削除&追加)した際のAthena動作を知りたい方
最初に結論
- S3のファイルを上書き(または削除&追加)したとき、新しいファイルの内容が取得できる
CSVファイルで試してみる
S3バケットへのアップロード(CSV)
S3バケットにCSVファイルをアップロードします。
time,user,level 2020-11-23,aaa,111 2020-11-23,bbb,333 2020-11-24,aaa,113 2020-11-25,aaa,115 2020-11-25,bbb,334
- アップロード先:s3://cm-fujii.genki-athena-test/test/sample.csv
Athenaテーブルの作成
まずは適当にデータベースを作成します。
CREATE DATABASE overwrite_test
続いてテーブルを作成します。
CREATE EXTERNAL TABLE IF NOT EXISTS overwrite_test.csv_test_table ( `time` date, `user` string, `level` int ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = ',', 'field.delim' = ',' ) LOCATION 's3://cm-fujii.genki-athena-test/test/' TBLPROPERTIES ('has_encrypted_data'='false', 'skip.header.line.count'='1');
データ取得
データ取得してみます。バッチリ取得できました。
SELECT * FROM "overwrite_test"."csv_test_table" limit 10;
CSVファイルを上書きし、データ取得する
S3バケットのCSVファイルを上書きします。
time,user,level 2020-12-13,xxx,1111 2020-12-13,yyy,2222 2020-12-14,xxx,3333 2020-12-15,xxx,4444 2020-12-15,zzz,5555
テーブルの再作成などは行わず、そのままデータ取得してみます。
SELECT * FROM "overwrite_test"."csv_test_table" limit 10;
上書きしたCSVファイルの内容が取得できました。
CSVファイルを削除してから追加し、データ取得する
CSVファイルを削除し、Athenaでデータ取得します。
SELECT * FROM "overwrite_test"."csv_test_table" limit 10;
取得したデータは0件でした。
このまま新しいCSVファイルをアップロードします。
time,user,level 2000-10-03,foo,11 2000-10-03,bar,22 2000-10-04,bar,33 2000-10-05,foo,44 2000-10-05,bar,55
テーブルの再作成などは行わず、そのままデータ取得してみます。
SELECT * FROM "overwrite_test"."csv_test_table" limit 10;
アップロードしたCSVファイルの内容が取得できました。
さいごに
ふと疑問に思ったので試してみました。十中八九問題ないと考えていましたが、実際にそのとおりで安心です。